iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
0

if 條件敘述

go的if 寫法很簡單,打個if就會出現Snippet可選擇,按下ENTER就會自動產生程式碼
https://ithelp.ithome.com.tw/upload/images/20200914/20129515LC9I5ggUBK.png

package main

import "fmt"

func main() {
	if condition {
		
	}
}

把condition改成要寫的判斷邏輯就完成最基本的if判斷式。

package main

import "fmt"

func main() {
	a := 7
	b := 8
	if a < b {
		fmt.Println("A < B")
	}
}

如果要寫if else的判斷式,要照著官方的寫法才行喔,else跟 {的位置不可以亂改,會導致編譯失敗。

package main

import "fmt"

func main() {
	a := 7
	b := 8
	c := 9
	//標準寫法
	if a < b {
		fmt.Println("A < B")
	} else {
		fmt.Println("A > B")
	}
	//if else if
	if a > b {
		fmt.Println("A > B")
	} else if c > b {
		fmt.Println("c > B")
	} else {
		fmt.Println("b >c")
	}

	//FREE STYLE,母湯R~~~GOOGLE不要讓你這樣子寫
	if a < b{
		fmt.Println("A < B")
	}
	else
	{
		fmt.Println("A > B")
	}
}

unexpected else, expecting }
unexpected { after top level declaration

一個題外話,if else如果能少用,if else if else 這樣子的判斷式更要避免,
雖然編譯跟邏輯上是合理的,但是對閱讀CODE來說是負面的,以下是張很有名的梗圖
https://ithelp.ithome.com.tw/upload/images/20200914/20129515JAUKOp61Lg.jpg
當你一直用IF ELSE來寫判斷式時,你的程式碼就會變成這個形狀,
可考慮這樣子作

package main

import "fmt"

func main() {
	a := 7
	b := 8

	var result bool
 
    //if else寫法,沒有不好,只是有更簡潔的寫法
	if a > b {
		result = true
	} else {
		result = false
	}
	//只用if就做到if else作的判斷,可考慮這樣子寫
	//有可能會導致程式碼行長變多,但是可讀性會比較好
	result = false
	if a > b {
		result = true
	}
	if result {
		fmt.Println("a > b")
	}
}

選擇性敘述 switch

在go中是用switch來作選擇性敘述,一樣有Snippet,打出switch,選擇Snippet按下ENTER產生程式碼

package main

import "fmt"

func main() {
	switch expression {
	case condition:
		
	}
}

某些情境下,你用if也可以完成判斷式,但是就程式碼會變的很髒,不美觀,
多條件時可考慮用switch來完成你的判斷式,程式碼也簡潔好閱讀。

package main

import "fmt"

func main() {

	price := getPrice("toyota")
	fmt.Println("toyota price:", price)

	price = getPrice("lexus")
	fmt.Println("lexus price:", price)

	price = getPrice("ferrari")
	fmt.Println("ferrari price:", price)

	//如果用IF就要寫成波動拳惹~~
	car := "toyota"
	if car == "toyota" {
		fmt.Println("toyota price:", 650000)
	} else if car == "lexus" {
		fmt.Println("lexus price:", 1500000)
	} else if car == "bmw" {
		fmt.Println("bmw price:", 2500000)
	}
	//或是一堆IF
	if car == "toyota" {
		fmt.Println("toyota price:", 650000)
	}
	if car == "lexus" {
		fmt.Println("lexus price:", 1500000)
	}
	if car == "bmw" {
		fmt.Println("bmw price:", 2500000)
	}
}

func getPrice(car string) (ret int) {
	switch car {
	case "toyota":
		ret = 650000
	case "lexus":
		ret = 1500000
	case "bmw":
		ret = 2500000
	case "porsche":
		ret = 4500000
	default:
		ret = 0
	}
	return ret
}


上一篇
[DAY7]GO的運算子
下一篇
[DAY9]來學GO迴圈
系列文
欸你這週GO了嘛30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言